/**
 * 闭包， 函数可以访问到其他函数内部的函数， 就是闭包
 */
function userSayHi() {
    const name = 'ck'

    function sayHi() {
        console.log(`user ${name} sayHi`)
    }
    sayHi()
}

userSayHi()// userSayHi()这个函数，可以访问到其他函数内部的数据

//  如果将name这个属性放进全局变量, 那么就会导致, 全局变量的污染, 会造成数据无法被GC回收. 
function SayHi() {
    const name = 'ck'

    // say函数可以访问外部的变量, 这是肯定的, 
    // 因为函数可以访问外部的数据, 但是,
    // 这样的好处就是可以将函数的数据, 放在一个方法的作用域中,不会被全局影响. 
    function say() {
        console.log(`this is the ${name} say something!`);
    }
    return say()
}

// Error: 错误的基类
// SyntaxError: 语法错误
// ReferenceError: 引用错误

//ReferenceError: name is not defined
console.log(name);// 这里会报错, 因为name没有被定义. 

SayHi()


